/* **************    列表页面（list + addUpdate.vue） Mixins   ***************** */
/**
 * 使用该混入的前置条件:
 *    1. 列表页面 + 添加/修改页面，且添加组件标签名为<add-update>；
 *    2. [列表] 单表获取列表数据，且无其他附加数据，即getList()调用common.js中的pageList；
 *    3. [添加/修改] 打开添加/修改页面无初始化数据；
 *    4. [删除] 调用common.js中的deleteObj()，返回状态码为status；
 */

import {
  pageList,
  deleteObj,
} from '@/api/common'

/* 工具 */
import * as common from '@/utils/base/common'

export default {
  data() {
    return {
      list: null,
      total: null,
      listLoading: true,
      btnDisabled: false, // 按钮禁用状态

      /* 添加 修改 相关数据 */
      showAdd: false, // 是否显示添加修改页面，默认不显示
      btnType: '', // 当前页面类型 [create update search]
      rowId: '', // 添加为空，修改为所选数据主键id
    }
  },
  created() {
    this.initData()
  },
  methods: {
    
    /**
     * 后台获取列表数据
     */
    getList() {
      this.listLoading = true
      pageList(this.restPath, this.listQuery).then(response => {
        this.list = response.data.records
        this.total = response.data.total
        this.listLoading = false
      }).catch(err => {
        this.listLoading = false;
        this.btnDisabled = true // 按钮禁用
        console.error(err)
      })
    },
    
    // 点击 添加
    handleCreate() {
      this.rowId = ''
      this.showAdd = true;
      this.btnType = 'create';
    },
    // 点击 修改
    handleUpdate(rowId) {
      this.rowId = rowId;
      this.showAdd = true;
      this.btnType = 'update';
    },

    // 点击 删除
    handleDelete(rowId) {
      this.$confirm('此操作将永久删除, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteObj(this.restPath, rowId).then(response => {
          if(response.code === 200) {
            common.message(this, 'success', 2, '删除数据成功!')
            this.getList()
          } else {
            common.message(this, 'warning', 2, response.message)
          }
        })
      }).catch(() => {});
    },

    handleFilter() {
      this.listQuery.page = 1
      this.getList()
    },
    handleSizeChange(val) {
      this.listQuery.pageSize = val
      this.getList()
    },
    handleCurrentChange(val) {
      this.listQuery.page = val
      this.getList()
    },
    
    // 刷新页面
    flushList() {
      this.closeDialog()
      this.getList()
    },
    //关闭弹出框
    closeDialog() {
      this.showAdd = false
    },

  }
}